// 图标组件基础属性
export interface IconProps {
  /** 图标名称 */
  name?: string;
  /** 图标大小 */
  size?: number;
  /** 图标颜色 */
  color?: string;
}

// 菜单图标选择器属性
export interface MenuIconProps {
  /** 输入框前置内容 */
  prepend?: string;
  /** 输入框占位文本 */
  placeholder?: string;
  /** 输入框大小 */
  size?: string;
  /** 是否禁用 */
  disabled?: boolean;
  /** 是否可清空 */
  clearable?: boolean;
  /** 自定义空状态描述文字 */
  emptyDescription?: string;
  /** 双向绑定值 */
  modelValue?: string;
}

// 图标列表组件属性
export interface IconListProps {
  /** 图标列表数据 */
  list?: string[];
  /** 自定义空状态描述文字 */
  empty?: string;
  /** 高亮当前选中图标 */
  prefix?: string;
  /** 是否显示加载状态 */
  loading?: boolean;
  /** 每行显示的图标数量 */
  columns?: number;
  /** 图标间距 */
  gutter?: number;
}

// 图标选择器状态
export interface IconSelectorState {
  /** 当前选中的图标前缀 */
  fontIconPrefix: string;
  /** 弹窗宽度 */
  fontIconWidth: number;
  /** 搜索关键词 */
  fontIconSearch: string;
  /** 占位符文本 */
  fontIconPlaceholder: string;
  /** 当前激活的标签页 */
  fontIconTabActive: string;
  /** 图标列表数据 */
  fontIconList: {
    ali: string[];
    ele: string[];
  };
  /** 是否正在搜索 */
  isSearching: boolean;
}

// 事件类型
export interface IconEvents {
  /** 更新 modelValue */
  'update:modelValue': (value: string) => void;
  /** 获取图标 */
  get: (value: string) => void;
  /** 清空图标 */
  clear: (value: string) => void;
  /** 获取图标（列表组件） */
  'get-icon': (value: string) => void;
}

// 图标类型枚举
export type IconType = 'ali' | 'ele';

// 图标大小枚举
export type IconSize = 'small' | 'default' | 'large';

// 组件实例类型
export interface ComponentInstance {
  $el: HTMLElement;
  focus: () => void;
  blur: () => void;
}

// 图标数据接口
export interface IconData {
  name: string;
  displayName: string;
  component: any;
}

// 图标列表数据接口
export interface IconListData {
  ali: IconData[];
  ele: IconData[];
}

// 搜索配置接口
export interface SearchConfig {
  debounce: number;
  minLength: number;
  caseSensitive: boolean;
}

// 主题配置接口
export interface ThemeConfig {
  primaryColor: string;
  borderRadius: string;
  fontSize: string;
}

// 组件配置接口
export interface ComponentConfig {
  search: SearchConfig;
  theme: ThemeConfig;
  maxHeight: number;
  showSearch: boolean;
  showTabs: boolean;
}
